home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 15
/
Aminet 15 - Nov 1996.iso
/
Aminet
/
dev
/
basic
/
ace24dist.lha
/
ace24.lha
/
include
/
devices
/
scsidisk.h
< prev
next >
Wrap
C/C++ Source or Header
|
1996-09-10
|
5KB
|
131 lines
#ifndef DEVICES_SCSIDISK_H
#define DEVICES_SCSIDISK_H 1
/*
** scsidisk.h for ACE Basic
**
** Note: Translated to ACE by ConvertC2ACE
** @ MapMeadow Software, Nils Sjoholm
**
**
** Date: 09/03/95
**
**
*/
/*
** This are the StructPointer defines for scsidisk.h
*/
#ifndef SCSICmdPtr
#define SCSICmdPtr ADDRESS
#endif
/*
** End of StructPointer defines for scsidisk.h
*/
#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif /* EXEC_TYPES_H */
/*--------------------------------------------------------------------
*
* SCSI Command
* Several Amiga SCSI controller manufacturers are converging on
* standard ways to talk to their controllers. This include
* file describes an exec-device command (e.g. for hddisk.device)
* that can be used to issue SCSI commands
*
* UNIT NUMBERS
* Unit numbers to the OpenDevice call have encoded in them which
* SCSI device is being referred to. The three decimal digits of
* the unit number refer to the SCSI Target ID (bus address) in
* the 1's digit, the SCSI logical unit (LUN) in the 10's digit,
* and the controller board in the 100's digit.
*
* Examples:
* 0 drive at address 0
* 12 LUN 1 on multiple drive controller at address 2
* 104 second controller board, address 4
* 88 not valid: both logical units and addresses
* range from 0..7.
*
* CAVEATS
* Original 2090 code did not support this command.
*
* Commodore 2090/2090A unit numbers are different. The SCSI
* logical unit is the 100's digit, and the SCSI Target ID
* is a permuted 1's digit: Target ID 0..6 maps to unit 3..9
* (7 is reserved for the controller).
*
* Examples:
* 3 drive at address 0
* 109 drive at address 6, logical unit 1
* 1 not valid: this is not a SCSI unit. Perhaps
* it's an ST506 unit.
*
* Some controller boards generate a unique name (e.g. 2090A's
* iddisk.device) for the second controller board, instead of
* implementing the 100's digit.
*
* There are optional restrictions on the alignment, bus
* accessability, and size of the data for the data phase.
* Be conservative to work with all manufacturer's controllers.
*
*------------------------------------------------------------------*/
#define HD_SCSICMD 28 /* issue a SCSI command to the unit */
/* io_Data points to a SCSICmd */
/* io_Length is sizeof(STRUCT SCSICmd) */
/* io_Actual and io_Offset are not used */
STRUCT SCSICmd
ADDRESS scsi_Data /* SHORTINT aligned data for SCSI Data Phase */
/* (optional) data need not be byte aligned */
/* (optional) data need not be bus accessable */
LONGINT scsi_Length /* even length of Data area */
/* (optional) data can have odd length */
/* (optional) data length can be > 2**24 */
LONGINT scsi_Actual /* actual Data used */
ADDRESS scsi_Command /* SCSI Command (same options as scsi_Data) */
SHORTINT scsi_CmdLength /* length of Command */
SHORTINT scsi_CmdActual /* actual Command used */
BYTE scsi_Flags /* includes intended data direction */
BYTE scsi_Status /* SCSI status of command */
ADDRESS scsi_SenseData /* sense data: filled if SCSIF_[OLD]AUTOSENSE */
/* is set and scsi_Status has CHECK CONDITION */
/* (bit 1) set */
SHORTINT scsi_SenseLength /* size of scsi_SenseData, also bytes to */
/* request w/ SCSIF_AUTOSENSE, must be 4..255 */
SHORTINT scsi_SenseActual /* amount actually fetched (0 means no sense) */
END STRUCT
/*----- scsi_Flags -----*/
#define SCSIF_WRITE 0 /* intended data direction is out */
#define SCSIF_READ 1 /* intended data direction is in */
#define SCSIB_READ_WRITE 0 /* (the bit to test) */
#define SCSIF_NOSENSE 0 /* no automatic request sense */
#define SCSIF_AUTOSENSE 2 /* do standard extended request sense */
/* on check condition */
#define SCSIF_OLDAUTOSENSE 6 /* do 4 byte non-extended request */
/* sense on check condition */
#define SCSIB_AUTOSENSE 1 /* (the bit to test) */
#define SCSIB_OLDAUTOSENSE 2 /* (the bit to test) */
/*----- SCSI io_Error values -----*/
#define HFERR_SelfUnit 40 /* cannot issue SCSI command to self */
#define HFERR_DMA 41 /* DMA error */
#define HFERR_Phase 42 /* illegal or unexpected SCSI phase */
#define HFERR_Parity 43 /* SCSI parity error */
#define HFERR_SelTimeout 44 /* Select timed out */
#define HFERR_BadStatus 45 /* status and/or sense error */
/*----- OpenDevice io_Error values -----*/
#define HFERR_NoBoard 50 /* Open failed for non-existant board */
#endif /* DEVICES_SCSIDISK_H */